#include "./micropython/py/dynruntime.h"

mp_obj_t _DictAPI_CreateDict;
mp_obj_t _DictAPI_GetValue;
mp_obj_t _DictAPI_SetValue;
mp_obj_t _DictAPI_RemoveKey;
mp_obj_t _DictAPI_GetKeys;
mp_obj_t _DictAPI_GetValues;

static mp_obj_t init_DictAPI_CreateDict(mp_obj_t func) {
    _DictAPI_CreateDict = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_DictAPI_GetValue(mp_obj_t func) {
    _DictAPI_GetValue = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}


static mp_obj_t init_DictAPI_SetValue(mp_obj_t func) {
    _DictAPI_SetValue = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_DictAPI_RemoveKey(mp_obj_t func) {
    _DictAPI_RemoveKey = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_DictAPI_GetKeys(mp_obj_t func) {
    _DictAPI_GetKeys = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_DictAPI_GetValues(mp_obj_t func) {
    _DictAPI_GetValues = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

mp_obj_t DictAPI_CreateDict() {
    mp_obj_t args[0] = {}; 
    return mp_call_function_n_kw(_DictAPI_CreateDict, 0, 0, args);
}

mp_obj_t DictAPI_GetValue(mp_obj_t dict, mp_obj_t key) {
    mp_obj_t args[2] = {dict, key};
    return mp_call_function_n_kw(_DictAPI_GetValue, 2, 0, args);
}

mp_obj_t DictAPI_SetValue(mp_obj_t dict, mp_obj_t key, mp_obj_t value) {
    mp_obj_t args[3] = {dict, key, value};
    return mp_call_function_n_kw(_DictAPI_SetValue, 3, 0, args);
}

mp_obj_t DictAPI_GetValues(mp_obj_t dict) {
    mp_obj_t args[1] = {dict};
    return mp_call_function_n_kw(_DictAPI_GetValues, 1, 0, args);
}

mp_obj_t DictAPI_RemoveKey(mp_obj_t dict, mp_obj_t key) {
    mp_obj_t args[2] = {dict, key};
    return mp_call_function_n_kw(_DictAPI_RemoveKey, 2, 0, args);
}

mp_obj_t DictAPI_GetKeys(mp_obj_t dict) {
    mp_obj_t args[1] = {dict};
    return mp_call_function_n_kw(_DictAPI_GetKeys, 1, 0, args);
}

#define CSDK_INIT_DICTAPI_GLOBALS static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_CD, init_DictAPI_CreateDict); static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_GVe, init_DictAPI_GetValue); static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_RK, init_DictAPI_RemoveKey); static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_GK, init_DictAPI_GetKeys); static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_SV, init_DictAPI_SetValue); static MP_DEFINE_CONST_FUN_OBJ_1(O_DA_GVs, init_DictAPI_GetValues); 
#define CSDK_EXPORT_DICTAPI_GLOBALS mp_store_global(MP_QSTR_regDA_CD, MP_OBJ_FROM_PTR(&O_DA_CD)); mp_store_global(MP_QSTR_regDA_GVe, MP_OBJ_FROM_PTR(&O_DA_GVe)); mp_store_global(MP_QSTR_regDA_RK, MP_OBJ_FROM_PTR(&O_DA_RK)); mp_store_global(MP_QSTR_regDA_GK, MP_OBJ_FROM_PTR(&O_DA_GK)); mp_store_global(MP_QSTR_regDA_SV, MP_OBJ_FROM_PTR(&O_DA_SV)); mp_store_global(MP_QSTR_regDA_GVs, MP_OBJ_FROM_PTR(&O_DA_GVs));
